package mao.leetcode.offer;

/**
 * @author Totoro
 * @date 2020/8/11
 * @explain:
 */
public class offer52 {

    //通过使用链表有循环的方式进行转化有问题。
//    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
//
//        if (headA == null || null == headB) return null;
//        ListNode tailA=headA;
//        while(tailA.next != null) tailA = tailA.next;
//        tailA.next = headB;
//
//        ListNode fast = headA.next ,slow = headA;
//        while(fast != slow){
//            if (fast == null || slow == null) return null;
//            fast = fast.next.next;
//            slow = slow.next;
//        }
//        tailA.next = null;
//        return fast;
//    }

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {

        if (headA == null || null == headB) return null;

        ListNode node1 = headA ,node2 = headB;
        //若是相交前等长度相等，那么也是可以的。 所以同时为null只有平行的情况下。
        while(node1 != node2){
            node1 = (node1 == null?headB:node1.next);
            node2 = (node2 == null?headA:node2.next);
        }
        return node1;
    }

    public class ListNode {
      int val;
      ListNode next;
      ListNode(int x) {
          val = x;
          next = null;
      }
    }
}
